今foo
という名前の Submodule があるとします。
そして、a
ブランチでは aaaaaa
が最新 、b
ブランチでは bbbbbb
が最新の Submodule があり、どちらもmaster
ブランチから切ったあと Submodule 情報が更新されている状態だとします。
このとき、恐らくa
ブランチのマージはすんなりできますが、その後b
を取り込もうとした時にコンフリクトが起こるのではないかと思います。
Submodule 周りのコンフリクトは GitHub 上のプルリクエストページ上では解決できずローカルで解決するしかないので少し複雑です。
以下の方法は僕が色々試した結果なのでベストではないかもしれません。誰か詳しい人がいたら@nju33まで教えてください。
Submodule 同士のコンフリクトを解消する
問題の Submodule を削除する
一度消してしまいます。以下で Sumodule ディレクトリを削除すると.gitmodules
からも消えます。
git rm foo
問題の Submodule を再度設定する
これは追加するときと同じですね。
git submodule add [-b BRANCH_NAME] foo
Submodule 側のあるコミットを HEAD に指定したい
もし、コミットを指定したものに変えたいなら以下でできます。
#1つしかない、または全部
git submodule foreach git reset --hard
このブランチだけ指定したいんだという場合は以下でできます。その Submodule のルートディレクトリを見て、「BRANCH_NAME
が入っていれば HEAD コミットを変える」ということをしています。こちらももっといい方法があれば@nju33に教えてください。
git submodule foreach sh -c 'if echo `git rev-parse --show-toplevel` | grep > /dev/null; then git reset --hard ; fi'
ちなみにここで間違えた場合は以下で戻しましょう。
git submodule update --init